• HTML
  • CSS
  • JS

    Nivel 1 JS

    Propiedades

Programación Orientada a Objetos (P.O.O)

La programación orientada a objetos se trata de un planteamiento de la programación, consiste en estructurar el código de forma que este describa un objeto real, incluyendo sus características y usos, en otras palabras se busca que al imitar las características y propiedades de un objeto real sea más fácil estructurar el código de una forma más eficiente.

La programación orientada a objetos está compuesta por seis (6) secciones conceptuales del código, las cuales son:

Estructura de Programación Orientada a Objetos

Clases

Se trata del bloque de código encargado de generar objetos, básicamente se trata del contenedor que albergará todo el código responsable de estructurar y generar los atributos (características) y métodos (usos) del objeto.

Nota: No se puede definir un objeto con el mismo nombre que la clase.

Constructor

Se trata de una sección del código interno de una clase, en sí se trata del bloque de código responsable de la generación del objeto y de sus atributos (características) para lo cual cuenta con una estructura especial.

"Constructor" se trata de una palabra clave para indicar este tipo de bloque de código a JavaScript, seguido de esta palabra clave se indican dentro de paréntesis los valores de los atributos (en este caso: especie, edad, color) seguido de llaves ( { } ) las cuales contienen el bloque de código, en el cual se indican los nombres de los atributos, esto se realiza con la palabra clave "this", la cual es la forma de hacer referencia al objeto en cuestión seguido de un punto (.) y del nombre del atributo, a los que se les asigna su respectivo valor.

Esta es la estructura de un constructor en la cual se definen los atributos que va a poseer el objeto, de este modo todo objeto que sea generado con esta clase poseerá los atributos "especie", "edad", "color".

Nota: La palabra clave "this" no se puede utilizar fuera de la estructura del "constructor", para hacer referencia al objeto que se está definiendo es necesario hacerlo a través de su nombre, esto ya sea en el interior o exterior de la clase.

Métodos

Se tratan en pocas palabras de aquellas funciones que un objeto puede ejecutar, estas al igual que el "constructor" están albergadas dentro de una clase y ese es el motivo de su nombre, en sí, los métodos no se diferencian de una función, sin embargo se les llama así para hacer referencia a que pertenecen a un objeto.

En este ejemplo se puede apreciar las diferentes partes de la clase, el constructor y un método, en este caso el método posee el nombre de "verInfo()", la cual imprime en pantalla los datos albergados en el atributo "this.info", en sí eso es un método simplemente una función que se encuentra dentro de un objeto.

Nota: Los métodos de un objeto no pueden ser funciones de tipo flecha, deben de poseer la estructura tradicional.

Generar un objeto

Emplear la clase y generar un objeto es realmente un proceso muy simple una vez la clase ya se encuentra definida, simplemente es necesario definir la variable (constante) que albergará el objeto, se utiliza la palabra clave "new" y se llama a la clase a emplear, seguido de paréntesis () ya que en estos se indican los atributos del objeto, cada uno de los atributos debe estar separado por una coma.

En este ejemplo se definen tres objetos diferentes, cada uno con un nombre y datos propios pero empleando la misma clase para elaborarlos, por lo tanto todos son objetos con los mismos atributos y métodos.

En sí el llamado de la clase para generar un objeto es muy simple, se asemeja a declarar una variable y llamar a una función a la vez, sin embargo existen algunos detalles a tener en cuenta como que los atributos que no sean definidos (no se ingrese el dato) permanecerán como undefined.

Nota: Al trabajar con Objetos lo más recomendable es emplear constantes (const) ya que de ese modo el objeto no será volátil, lo que puede llegar a ocasionar problemas más adelante.

Extraer Atributos o Métodos de un Objeto

El llamado ya sea de los atributos (datos o "características") o métodos (funciones) de un objeto es realmente simple, se trata de realizar el llamado del objeto y definir el elemento que se desea extraer de este, esto se hace utilizando el nombre del objeto seguido de un punto (.) que hace de separador seguido del nombre del elemento a utilizar, de la siguiente forma:

Resultado

En este ejemplo se llama al método "verInfo" del objeto, el cual imprime en pantalla una cadena de texto que concatena los atributos del objeto en cuestión, de este modo se pueden ejecutar los métodos de un objeto o se pueden extraer los valores de los atributos de estos.

Conceptos de la Programación Orientada a Objetos

Abstracción

Se trata de la práctica de simplificar lo más posible el planteamiento del objeto, en otras palabras, cuando tratamos de hacer referencia a un objeto real con la programación no se busca el plasmar cada una de sus características o acciones, sino que en su lugar se simplifica tanto como sea posible, conservando únicamente las características y acciones esenciales del objeto.

Modularidad

Consiste en la práctica de seccionar una gran problemática en pequeñas porciones de esta y enfocarse en solucionarlas una por una, de ese modo se simplifica la eficiencia y carga de trabajo, este concepto se pasa a la programación como bloques de código en el cual cada uno soluciona una pequeña solución a cada porción de la problemática y en conjunto solucionan la totalidad de esta.

Encapsulamiento

Se trata de la práctica de aislar los datos del programa tanto como sea posible, para que de este modo no estén al alcance del usuario ni tampoco sea fácil acceder a estos, buscando tanto como sea posible que los datos sean privados.

Polimorfismo

Consiste en el cómo dos objetos se comportan de manera distinta ante el mismo método debido a sus propiedades (atributos) particulares, por ejemplo en el mundo real si se define la acción "caminar" como un método, y se define a una "vaca" y un "perro" como objetos, ambos objetos se comportarán de forma diferente, ya que cada una desarrollará este método en base a sus características propias.

Conceptos con Impacto en el Código

Se tratan de algunos conceptos que aparte de lo teórico poseen palabras reservadas para su incorporación en la programación orientada a objetos.

Herencia

La "herencia" se basa en generar una clase "hija" que sea capaz de utilizar todos los métodos y atributos de su predecesora a la vez que añade atributos y métodos propios, por supuesto que se puede definir cuáles de los atributos heredará, ya que si alguno de estos no es necesario simplemente puede ser ignorado y de ese modo la clase hija no poseerá este atributo, sin embargo podrá hacer uso de todos los métodos de la clase original.

La herencia es un concepto unilateral, lo que significa que únicamente la clase hija puede hacer uso de los atributos y métodos de la clase padre y no al revés.

La estructura de la declaración de una clase hija es similar a la de una clase normal, ya que también se inicia empleando la palabra reservada "class" seguido del nombre de la clase y de las llaves ( { } ) que almacenan el bloque de código, también es necesario indicar un constructor para lo cual se sigue empleando la palabra reservada "constructor" el cual a su vez sigue manteniendo su estructura, sin embargo se diferencia en:

  • Entre el nombre de la clase y las llaves del bloque se ingresa la palabra clave "extends" seguido del nombre de la clase padre, de este modo se indica que se trata de una clase hija y se indica de cuál clase heredará sus atributos y métodos.

  • El constructor vuelve a definir los datos que utilizará dentro de paréntesis, sin embargo no es necesario que se vuelvan a definir los atributos ya establecidos en la clase padre, para heredar estos atributos se emplea la palabra clave "super" seguida de paréntesis "()" los cuales albergarán los nombres de los atributos a heredar, a su vez dentro de este constructor se puede definir nuevos atributos propios de la clase hija, para hacerlo se sigue el mismo procedimiento que el de la clase padre: se incluye dentro de los datos que empleará el constructor y se define utilizando la palabra clave "this.".

De este modo la clase hija heredará los atributos seleccionados a la vez que todos los métodos de la clase padre, a la par que será capaz de generar sus propios métodos y atributos.

Ejemplo

En este ejemplo se puede apreciar la estructura de la declaración de una clase hija llamada "Perro", la cual hereda los atributos y métodos de la clase "animal" (su nombre se cambió a Animal), la cual ha sido empleada en los ejemplos anteriores, a la vez que añade un nuevo atributo llamado "raza" y un nuevo método llamado "ladrar".

El uso y llamado de una clase hija es exactamente igual al de una clase normal, no se diferencia en nada.

En este segundo ejemplo se genera un objeto "perro" con la clase "Perro" junto con los objetos "gato" y "pájaro" utilizando la clase "Animal".

Nota: No se puede definir un objeto con el mismo nombre que la clase.

Nota: A su vez la clase padre no puede usar ni los atributos ni métodos de las clases hijas.

Métodos Estáticos

Se tratan de métodos que no requieren de ningún atributo para su ejecución, por lo tanto son métodos que pueden ser utilizados sin la generación de un objeto, para indicar que se trata de un método estático se emplea la palabra clave "static".

Ejemplo

Llamado

Resultado

En este ejemplo se puede apreciar un método estático, el cual al no necesitar ningún tipo de atributo puede ser utilizado sin la existencia de un método que le provea estos atributos. Como se puede ver en la segunda imagen, para llamar al método se utiliza el nombre de la clase ("Perro") seguido de un punto (.) que hace de divisor seguido del nombre del método (ladrar).

Método Set y Método Get

Se tratan de dos métodos con dos funciones predefinidas, el método "set" permite modificar el valor de un atributo del objeto, mientras que el método "get" permite extraer el valor del atributo.

Estos métodos se utilizan principalmente en las ocasiones que se desee acceder a datos encapsulados, por lo tanto se tratan de la forma correcta de modificar y extraer el valor de este tipo de métodos y atributos.

Su estructura es muy simple, consiste en incorporar la palabra clave "set" o "get" dependiendo de cuál método se esté definiendo seguido del nombre del método, seguido de los paréntesis los cuales permanecen vacíos en el método "get" mientras que en el método "set" contienen el dato que se modificará y por último siguen las llaves ( { } ) contenedoras del método.

Ejemplo

Llamado

Resultado

El método "set" tiene una particularidad a la hora de ser llamado, la cual es que la forma en la que se indica el nuevo valor en este es igual a la manera en la que se indica el valor de los atributos dentro del constructor, con la diferencia de que en vez de usar la palabra clave "this" se usa el nombre del objeto al que se le está modificando su atributo.

Por su lado en el método "get" se utiliza la palabra clave "return" ya que al final de cuentas los métodos son iguales que las funciones, por lo que con esta palabra clave se envían datos al exterior de estas.

Contacto

¿Quién soy?

Mi nombre es Carlos Miguel Puche Moreno, estoy estudiando programación web de forma autodidacta, si quieres saber más visita mi perfil de GitHub haciendo clic en mi fotografía, o visita mis redes sociales:

Redes

Curriculum